#ifndef ENEMY_OWNED_STATES_H
#define ENEMY_OWNED_STATES_H
////////////////////////////////////////////////////////////////////////////////
//
//	Name:	EnemyOwnedStates.h
//
//	Desc:	Declare all the states that can be assigned to the Immortal Class
//
////////////////////////////////////////////////////////////////////////////////

#include "State.h"

class Enemy;

class EnemyGlobalState : public State<Enemy>
{
private:

	EnemyGlobalState(){}
	EnemyGlobalState(const EnemyGlobalState&);
	EnemyGlobalState operator=(const EnemyGlobalState&);
public:
	static EnemyGlobalState* Instance();
	virtual void Enter(Enemy* enemy){}
	virtual void Execute(Enemy* enemy);
	virtual void Exit(Enemy* enemy){}
	//virtual bool OnMessage(Immortal* immortal, const Telegram& msg);
};

////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
class Standard : public State<Enemy>
{
private:

	Standard(){}
	
	Standard(const Standard&);
	Standard& operator=(const Standard&);

public:

	//this is a singleton
	static Standard* Instance();

	virtual void Enter(Enemy* enemy);

	virtual void Execute(Enemy* enemy);

	virtual void Exit(Enemy* enemy);

	//virtual bool OnMessage(Attack* immortal, const Telegram& msg);
};


//////////////////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////////////////
//class Attack : public State<Immortal>
//{
//private:
//
//	Attack(){}
//	
//	Attack(const Attack&);
//	Attack& operator=(const Attack&);
//
//public:
//
//	//this is a singleton
//	static Attack* Instance();
//
//	virtual void Enter(Immortal* immortal);
//
//	virtual void Execute(Immortal* immortal);
//
//	virtual void Exit(Immortal* immortal);
//
//	virtual bool OnMessage(Immortal* immortal, const Telegram& msg);
//};
//
//
//class Help : public State<Immortal>
//{
//private:
//
//	Help(){}
//	
//	Help(const Help&);
//	Help& operator=(const Help&);
//
//public:
//
//	//this is a singleton
//	static Help* Instance();
//
//	virtual void Enter(Immortal* immortal);
//
//	virtual void Execute(Immortal* immortal);
//
//	virtual void Exit(Immortal* immortal);
//
//	virtual bool OnMessage(Immortal* immortal, const Telegram& msg);
//};
//
//
//
//class Retreat : public State<Immortal>
//{
//private:
//
//	Retreat(){}
//	
//	Retreat(const Retreat&);
//	Retreat& operator=(const Retreat&);
//
//public:
//
//	//this is a singleton
//	static Retreat* Instance();
//
//	virtual void Enter(Immortal* immortal);
//
//	virtual void Execute(Immortal* immortal);
//
//	virtual void Exit(Immortal* immortal);
//
//	virtual bool OnMessage(Immortal* immortal, const Telegram& msg);
//};


#endif